home *** CD-ROM | disk | FTP | other *** search
/ Aminet 13 / Aminet 13 - August 1996.iso / Aminet / mus / midi / mksys.lha / mksys / src / mksys.c next >
C/C++ Source or Header  |  1980-03-04  |  3KB  |  123 lines

  1. /* MKSYS 1.0 by Eli0t/cONTORTIOn (C) 1996 - FREEWARE */
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. /*
  7.  
  8.   ERROR CODES:  (stupid tactic, but works!)
  9.   =========================================
  10.  
  11.   00 - SYSEX data O.K. (probably)
  12.   01 - SYSEX data bad! (bad checksum)
  13.   02 - no parameters?! (i.e. help lines)
  14.   03 - I/O error! (disk full? write protected files?)
  15.   04 - bad length?! (no sense to compute a checksum!)
  16.  
  17.   =========================================
  18.  
  19. */
  20.  
  21.  
  22. main(int argc, char **argv)
  23. {
  24.   FILE *vstup, *vystup;
  25.   unsigned char pole[16384];
  26.   unsigned int length, suma, i, oldsuma;
  27.  
  28.   suma=0;
  29.   oldsuma=0;
  30.  
  31.        if(argc<2)
  32.   {
  33.      printf("\n \233\061\155Usage:\n         \233\062\155mksys filename\233\060\155\n\n");
  34.      printf(" \233\061\155Eli0t Studios Project - \233\060\155\233\063\155eliot@sci.muni.cz \233\060\155\233\061\155- (C) 1996 cONTORTIOn\n");
  35.      printf(" \233\063\063\155===============================================================\233\060\155\n");
  36.      printf("  \233\061\155Converts DX 4096,4097,4224,5232 to 4104 and K4 15114 to 15123\233\060\155\n\n");
  37.      return(2); /* bad number of parameters */
  38.   }
  39.  
  40.   vstup=fopen(argv[1],"r");
  41.        if (vstup==NULL)
  42.   {
  43.      printf("\233\061\155%s\233\060\155 - I/O error!\n",argv[1]);
  44.      return(3);
  45.   }
  46.  
  47.   length=fread(pole,(size_t) 1, (size_t) 16384, vstup);
  48.   fclose(vstup);
  49.  
  50.        if (length==4104)
  51.   {
  52.        for(i=6;i<4103;i++) suma+=pole[i];
  53.        suma&=(int) 127;
  54.        if (suma!=0)
  55.        {
  56.           printf("\233\061\155%s\233\060\155 - bad \233\062\155CHECKSUM\233\060\155\007!\n",argv[1]);
  57.           return(1);
  58.        }
  59.        else
  60.        {
  61.           printf("\233\062\155%s\233\060\155 - already converted, checksum O.K.\n",argv[1]);
  62.           return(0);
  63.        }
  64.   }
  65.  
  66.        if (length==4097) /* the checksum is IN! */
  67.   {
  68.        oldsuma=pole[4096]+128;length=4096;
  69.   }
  70.  
  71.        if (length==5232)  /* the checksum is IN! */
  72.   {
  73.        for(i=0;i<4097;i++) pole[i]=pole[i+6];
  74.        oldsuma=pole[4096]+128;length=4096;
  75.   }
  76.  
  77.        if (length==4224) length=4096; /* weirdo?! */
  78.  
  79.        if ((length==15114) || (length==4096)) {} else
  80.   {
  81.        printf("\233\061\155%s\233\060\155 - bad \233\062\155LENGTH\233\060\155!\n",argv[1]);
  82.        return(4); /* bad length! */
  83.   }
  84.  
  85.        if (length==4096)
  86. {
  87.   for(i=0;i<length;i++) suma+=pole[i];
  88.   suma&=(int) 127; suma=128-suma;
  89.   if (oldsuma!=0)
  90.   {
  91.      if (oldsuma!=(suma + 128))
  92.      {
  93.           printf("\233\061\155%s\233\060\155 - bad \233\062\155CHECKSUM\233\060\155\007!\n",argv[1]);
  94.           return(1);
  95.      }
  96.   }
  97. }
  98.  
  99.   vystup=fopen(argv[1],"w");
  100.        if (vystup==NULL)
  101.   {
  102.      printf("\233\061\155%s\233\060\155 - I/O error!\n",argv[1]);
  103.      return(3);
  104.   }
  105.  
  106.      if (length==4096)
  107.      {
  108.        printf("\233\062\155%s\233\060\155\n",argv[1]);
  109.        fprintf(vystup,"\360\103%c\011\040%c",0,0);
  110.        fwrite(pole,(size_t) 1, (size_t) 4096, vystup);
  111.        fprintf(vystup,"%c\367", suma);
  112.      }
  113.      else
  114.      {
  115.        printf("\233\062\155%s\233\060\155\n",argv[1]);
  116.        fprintf(vystup,"\xf0\x40%c\x22%c\x04%c%c",0,0,0,0);
  117.        fwrite(pole,(size_t) 1, (size_t) 15114, vystup);
  118.        fprintf(vystup,"\367");
  119.      }
  120.   fclose(vystup);
  121.   return(0);
  122. }
  123.